使用MultiResourceItemReader时,java Spring批处理在CustomLineMapper中获取文件名
我正在使用一个项,并实现了inferfaceResourceAware,以获取当前的资源文件名。我在项目处理器中得到了它,它可以很好地记录有关错误的完整信息
无论如何,如果FieldSetMapper抛出异常,我想得到文件名,以注册行内容、行号和文件名,但我没有找到正确的方法
这是我目前的代码:
public class MyCustomLineMapper<T> implements LineMapper<BaseDTO>, InitializingBean {
private LineTokenizer tokenizer;
private BeanWrapperFieldSetMapper<BaseDTO> fieldSetMapper;
public BaseDTO mapLine(String line, int lineNumber) throws Exception {
try {
BaseDTO r = fieldSetMapper.mapFieldSet(tokenizer.tokenize(line));
r.setLineNumber(lineNumber);
r.setLineContent(line);
return r;
} catch(Exception ex){
BaseDTO r = new BaseDTO();
r.setError(String.format(Keys.LINE_PARSE_ERROR, lineNumber, "FILE_NAME", line));
return r;
/// I want use the current filename in this moment.
}
}
public void setLineTokenizer(LineTokenizer tokenizer) {
this.tokenizer = tokenizer;
}
public void setFieldSetMapper(BeanWrapperFieldSetMapper<BaseDTO> fieldSetMapper) {
this.fieldSetMapper = fieldSetMapper;
}
public void afterPropertiesSet() {
Assert.notNull(tokenizer, "The LineTokenizer must be set");
Assert.notNull(fieldSetMapper, "The FieldSetMapper must be set");
}
}
在我的项目“BaseDTO”中,我实现了ResourceAware,如下所示:
public class BaseDTO implements ResourceAware {
protected String itemClassifier;
protected String error;
protected int lineNumber;
protected String lineContent;
protected Resource res;
protected String fileName;
@Override
public void setResource(Resource res) {
this.res = res;
this.fileName = res.getFilename();
}
但是,如果读取文件时出现异常(示例中的UncorrecnumberOfTokens),我需要从FieldSetMapper获取项目,并填充此字段,但异常会停止此操作。我怎样才能做到这一点
对不起我的英语。提前谢谢你的帮助
共 (0) 个答案